package com.rpay.service.wallet.impl;

import com.rpay.common.dto.wallet.WalletDTO;
import com.rpay.common.dto.wallet.WalletQueryDTO;
import com.rpay.dao.wallet.WalletDao;
import com.rpay.model.wallet.WalletDO;
import com.rpay.service.wallet.IWalletService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class WalletServiceImpl implements IWalletService {
    @Autowired
    private WalletDao walletDao;

    @Override
    public WalletQueryDTO list() {
        List<WalletDO> walletDOList = walletDao.list();
        List<WalletDTO> list = new ArrayList<>();
        if (walletDOList != null && walletDOList.size() > 0) {
            for (WalletDO walletDO : walletDOList) {
                WalletDTO walletDTO = convertDOToDTO(walletDO);
                list.add(walletDTO);
            }
        }
        WalletQueryDTO data = convertSqlDOToDTO(list);
        return data;
    }

    @Override
    public boolean post(WalletDTO walletDTO) {
        WalletDO walletDO = convertDTOToDO(walletDTO);
        walletDao.post(walletDO);
        return true;
    }

    @Override
    public boolean delete(Integer id) {
        walletDao.delete(id);
        return true;
    }

    @Override
    public boolean patch(WalletDTO walletDTO) {
        WalletDO walletDO = convertDTOToDO(walletDTO);
        walletDao.patch(walletDO);
        return true;
    }

    @Override
    public WalletDTO findById(int userWalletId) {
        WalletDO walletDO = walletDao.findById(userWalletId);
        return convertDOToDTO(walletDO);

    }

    private WalletDO convertDTOToDO(WalletDTO walletDTO) {
        WalletDO walletDO = null;
        if (walletDTO != null) {
            walletDO = new WalletDO();
            walletDO.setId(walletDTO.getId());
            walletDO.setWalletAddr(walletDTO.getWalletAddr());
            walletDO.setSecretKey(walletDTO.getSecretKey());
            walletDO.setRemark(walletDTO.getRemark());
        }
        return walletDO;
    }

    private WalletDTO convertDOToDTO(WalletDO walletDO) {
        WalletDTO walletDTO = null;
        if (walletDO != null) {
            walletDTO = new WalletDTO();
            walletDTO.setId(walletDO.getId());
            walletDTO.setWalletAddr(walletDO.getWalletAddr());
            walletDTO.setSecretKey(walletDO.getSecretKey());
            walletDTO.setRemark(walletDO.getRemark());
            walletDTO.setCreateTime(walletDO.getCreateTime());
            walletDTO.setUpdateTime(walletDO.getUpdateTime());
        }
        return walletDTO;
    }

    private WalletQueryDTO convertSqlDOToDTO(List list) {
        WalletQueryDTO walletQueryDTO = null;
        walletQueryDTO = new WalletQueryDTO();
        walletQueryDTO.setList(list);
        return walletQueryDTO;
    }

}
